package com.hmdp.utils;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/*
* 1.redisson实现可重入锁的原理：
* 使用锁计数器，获取锁时判断锁是否存在，
* 若存在，则判断线程标识是否为自己，如果是则计数器+1，不是则获取锁失败
* 不存在则新增锁并添加线程标识，
* 每次释放时需要判断锁是否是自己，如果是则正常-1，如果不是则代表锁已经被释放，
* 如果计数器的值为0，则说明锁需要被正常释放，直接释放锁
* 如果不为0，则需要重置锁的最大施放时间，以防锁提前释放
* */

@Configuration
public class RedisConfig {
    @Bean
    public RedissonClient redissonClient() {
        //创建配置
        Config config = new Config();
        config.useSingleServer().setAddress("redis://localhost:6379").setDatabase(1);
        //创建redisson对象
        return Redisson.create(config);
    }
}
